package cn.codeforfun.gitee.api.repo;

import cn.codeforfun.gitee.bean.GiteeBranch;
import cn.codeforfun.gitee.bean.repo.request.*;
import cn.codeforfun.gitee.bean.repo.response.GiteeRepoResponse;

import java.io.IOException;
import java.util.List;

/**
 * 仓库接口
 *
 * @author wangbin
 */
public interface GiteeRepoService {
    /**
     * 获取所有分支
     *
     * @param request 请求
     * @return 分支列表
     * @throws IOException 异常
     */
    List<GiteeBranch> listBranches(GiteeListBranchesRequest request) throws IOException;

    /**
     * 创建分支
     *
     * @param request 创建分支请求
     * @return 分支实体
     * @throws IOException 异常
     */
    GiteeBranch createBranch(GiteeCreateBranchRequest request) throws IOException;

    /**
     * 设置分支保护
     *
     * @param request 请求
     * @return 分支实体
     * @throws IOException 异常
     */
    GiteeBranch protectionBranch(GiteeProtectionBranchRequest request) throws IOException;

    /**
     * 列出授权用户的所有仓库
     *
     * @param request 查询参数
     * @return 仓库列表
     * @throws IOException 异常
     */
    List<GiteeRepoResponse> listRepos(GiteeRepoQueryRequest request) throws IOException;

    /**
     * 创建一个仓库
     *
     * @param request 仓库对象
     * @return 仓库对象
     * @throws IOException 异常
     */
    GiteeRepoResponse createRepo(GiteeRepoRequest request) throws IOException;

    /**
     * 删除仓库
     *
     * @param request 删除仓库请求
     * @throws IOException 异常
     */
    void deleteRepo(GiteeDeleteRepoRequest request) throws IOException;
}
